<?php


namespace App\Common\Logging\Injection;


use Illuminate\Log\Events\MessageLogged;
use Illuminate\Support\Facades\Mail;
use Monolog\Formatter\LineFormatter;
use Monolog\Logger;

/**
 * 此类为案例 注入到Log引擎的方法
 * Class LoggerInjection
 * @package App\Common\Logging\Injection
 */
class LoggerInjection
{
    public function __invoke($logger)
    {
        // TODO: Implement __invoke() method.
        //$logger 为Illuminate\Log\Logger对象
        //$logger->getLogger() 为Monolog\Logger对象
        //因为$logger使用了__call魔术方法将Monolog\Logger对象注册到了$logger对象上，所以直接使用$logger->method()就可以直接访问Monolog\Logger对象的方法

        //此处用于处理注入已经加载好的Handler就是日志引擎的处理模块
//        foreach ($logger->getHandlers() as $handler) {
//            $handler->setFormatter(new LineFormatter());
//        }

        //此处用于添加处理模块HandlerInterface $handler
        //$logger->pushHandler($handler);

        //此处用添加监听事件 可以添加多个事件
//        $logger->listen(function (MessageLogged $messageLogged){
//            var_dump("====listen=====", $messageLogged, "============");
//        });

        //此处用于注入处理器pushProcessor(callable $callback)
        /**
         * $record = [
        'message' => $message,
        'context' => $context,
        'level' => $level,
        'level_name' => $levelName,
        'channel' => $this->name,
        'datetime' => new DateTimeImmutable($this->microsecondTimestamps, $this->timezone),
        'extra' => [],
        ];
         */
//        $logger->pushProcessor(function ($record) {
//            var_dump($record);
//            return $record;
//        });

        //错误日志发送到邮箱
//        $logger->pushProcessor(function ($record) {
//            $to = "1366635163@qq.com";
//            $subject = "错误日志提醒:" . $record['channel'];
//            if ($record['level'] >= Logger::WARNING) {
//                Mail::raw(json_encode($record, JSON_UNESCAPED_UNICODE), function($msg) use ($to, $subject){
//                    $msg->to($to)->subject($subject);
//                });
//            }
//            return $record;
//        });

    }
}